﻿Imports System.Data
Imports System.Data.SqlClient

Public Class ordemServicoDAL


    Sub New()

    End Sub

    Function inserir(vei_codigo As Integer, os_data As Date, os_data_prevista As Date,
                     os_data_retorno As Date, os_km As Double, os_problema As String, os_real_problema As String,
                    os_valor As Double) As Integer
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim codigo As Integer
        Try

            'Comando para inserção de dados no banco
            cmd.CommandText = "INSERT INTO ordem_servico (vei_codigo, os_data, os_data_prevista," & _
                              " os_data_retorno, os_km,os_problema,os_real_problema, os_valor)" & _
                              " VALUES (@vei_codigo,@os_data,@os_data_prevista,@os_data_retorno," & _
                              " @os_km,@os_problema,@os_real_problema,@os_valor)"

            'Parâmetros de entrada
            cmd.Parameters.Add(New SqlParameter("@vei_codigo", SqlDbType.Int)).Value = vei_codigo
            cmd.Parameters.Add(New SqlParameter("@os_data", SqlDbType.Date)).Value = os_data
            cmd.Parameters.Add(New SqlParameter("@os_data_prevista", SqlDbType.Date)).Value = os_data_prevista
            cmd.Parameters.Add(New SqlParameter("@os_data_retorno", SqlDbType.Date)).Value = os_data_retorno
            cmd.Parameters.Add(New SqlParameter("@os_km", SqlDbType.Decimal)).Value = os_km
            cmd.Parameters.Add(New SqlParameter("@os_problema", SqlDbType.VarChar)).Value = os_problema
            cmd.Parameters.Add(New SqlParameter("@os_real_problema", SqlDbType.VarChar)).Value = os_real_problema
            cmd.Parameters.Add(New SqlParameter("@os_valor", SqlDbType.Decimal)).Value = os_valor

            'Execução da inserção com retorno do valor da chave primária
            codigo = objD.executacomandoAI(cmd, "ordem_servico")

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return codigo
    End Function

    Sub alterar(os_codigo As Integer, vei_codigo As Integer, os_data As Date, os_data_prevista As Date,
                     os_data_retorno As Date, os_km As Double, os_problema As String, os_real_problema As String,
                    os_valor As Double)
        Dim cmd As New SqlCommand
        Dim objD As New Dados

        Try

            'Comando para atualização de dados no banco
            cmd.CommandText = "UPDATE ordem_servico SET vei_codigo = @vei_codigo, os_data = @os_data," & _
                " os_data_prevista = @os_data_prevista, os_data_retorno = @os_data_retorno, os_km=@os_km , " & _
                "os_problema=@os_problema,os_real_problema = @os_real_problema,os_valor = @os_valor" & _
                " WHERE os_codigo = @os_codigo"

            'Parâmetros de entrada
            cmd.Parameters.Add(New SqlParameter("@os_codigo", SqlDbType.Int)).Value = os_codigo
            cmd.Parameters.Add(New SqlParameter("@vei_codigo", SqlDbType.Int)).Value = vei_codigo
            cmd.Parameters.Add(New SqlParameter("@os_data", SqlDbType.Date)).Value = os_data
            cmd.Parameters.Add(New SqlParameter("@os_data_prevista", SqlDbType.Date)).Value = os_data_prevista
            cmd.Parameters.Add(New SqlParameter("@os_data_retorno", SqlDbType.Date)).Value = os_data_retorno
            cmd.Parameters.Add(New SqlParameter("@os_km", SqlDbType.Decimal)).Value = os_km
            cmd.Parameters.Add(New SqlParameter("@os_problema", SqlDbType.VarChar)).Value = os_problema
            cmd.Parameters.Add(New SqlParameter("@os_real_problema", SqlDbType.VarChar)).Value = os_real_problema
            cmd.Parameters.Add(New SqlParameter("@os_valor", SqlDbType.Decimal)).Value = os_valor

            'Execução da alteração
            objD.executacomando(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Sub

    Sub excluir(ByVal codigo As Integer)
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Try
            'Comando para exclusão de um registro no banco
            cmd.CommandText = "DELETE FROM ordem_servico WHERE os_codigo = @codigo"

            'Parâmetro de comparação
            cmd.Parameters.Add(New SqlParameter("@codigo", SqlDbType.Int)).Value = codigo

            'Execução do comando
            objD.executacomando(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Sub

    Function localizarOrdemServico(ByVal descricao As String) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            'Comando para localizar vários registros no banco
            cmd.CommandText = "SELECT * FROM vw_ordem_servico WHERE vei_placa like @descricao ORDER BY os_codigo DESC"

            'Parâmetro de entrada
            cmd.Parameters.Add(New SqlParameter("@descricao", SqlDbType.VarChar)).Value = descricao + "%"

            'Execução do comando
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
    End Function


    Function localizar(ByVal descricao As String) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            If (descricao = "ultimo") Then
                cmd.CommandText = "SELECT os_codigo = max(os_codigo) FROM ordem_servico "
            ElseIf (descricao = "primeiro") Then
                cmd.CommandText = "SELECT os_codigo = min(os_codigo) FROM ordem_servico "

            Else
                'Comando para localizar vários registros no banco
                Dim codigo = Integer.Parse(descricao)
                cmd.CommandText = "SELECT * FROM ordem_servico WHERE os_codigo = @descricao"

                'Parâmetro de entrada
                cmd.Parameters.Add(New SqlParameter("@descricao", SqlDbType.Int)).Value = codigo
            End If
            'Execução do comando
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function localizarProxAnterior(ByVal descricao As String, ByVal codigo As Integer) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            If (descricao = "proximo") Then
                cmd.CommandText = "SELECT os_codigo FROM ordem_servico WHERE os_codigo = (SELECT MIN(os_codigo) FROM ordem_servico WHERE os_codigo > @codigo)"

            ElseIf (descricao = "anterior") Then
                cmd.CommandText = "SELECT os_codigo FROM ordem_servico  WHERE os_codigo = (SELECT MAX(os_codigo) FROM ordem_servico WHERE os_codigo < @codigo)"
            End If
            'Parâmetro de entrada
            cmd.Parameters.Add(New SqlParameter("@codigo", SqlDbType.Int)).Value = codigo
            'Execução do comando
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

End Class
